package com.ikas.ai.server.module.instance.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ikas.ai.server.config.handler.ListLongHandler;
import com.ikas.ai.server.config.handler.MapVListStringHandler;
import lombok.Data;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 工况转换实例步骤明细表
 *
 * @author hu.bowei
 * @email hu.bowei@ikasinfo.com
 * @date 2023-05-06 17:12:07
 */
@Data
@TableName(value = "t_work_instance_step_detail", autoResultMap = true)
public class DorisWorkInstanceStepDetail implements Serializable {
    private static final long serialVersionUID = 1L;


    /**
     * id
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 工况流程id,关联t_work_confition_flow
     */
    private Long wfId;

    /**
     * 工况流程名，冗余字段
     */
    private String wfName;

    /**
     * 工况流程实例id,关联（t_work_flow_instance）
     */
    private Long wfInstanceId;

    /**
     * 当前所属步骤id,关联(t_work_instance_step)
     */
    private Long stepInstanceId;

    /**
     * 步骤名
     */
    private String stepName;

    /**
     * 变量编码
     */
    private String meteCode;

    /**
     * 变量中文名称
     */
    private String meteName;

    /**
     * 变量值
     */
    private String meteValue;

    /**
     * 对应t_work_condition_step_detail主键ID
     */
    private Long detailId;

    /**
     * 子detailid集合 数组，例如[1,2,10]
     */
    @TableField(typeHandler = ListLongHandler.class)
    private List<Long> subDetailIds;

    /**
     * ||=或者，&&=且
     */
    private String subLogicalOperator;

    /**
     * 父detailid,  -1代表最顶层节点
     */
    private Long pDetailId;

    /**
     * 1=叶子节点，0=非叶子节点
     */
    private Boolean leaf;

    /**
     * 0=执行项，1=响应项
     */
    private Byte type;

    /**
     * type=0存响应项，type=1存执行项 多个[步骤code,编码code]
     */
    @TableField(typeHandler = MapVListStringHandler.class)
    private Map<String, List<String>> pMeteCode;

    /**
     * 1=测点，2=分叉步骤由启动项测点判断,3=分叉步骤由当前测点值判断,4=分叉步骤有同组响应项判断,5=无测点,仅描述,6=无测点,虚线框
     */
    private String label;

    private Integer labelType;

    /**
     * 1=更新sort排序后第一条数据，2=相同测点编码全部更新
     */
    private Integer updatePolicy;

    /**
     * 测点开始时间，有效变量值作为开始时间
     */
    private Long startTime;

    private Timestamp startDate;

    /**
     * 响应时长,类型为响应项时，测点开始时间-执行项开始时间
     */
    private Long costTime;

    /**
     * 平均响应时长,类型为响应项时，测点开始时间-执行项开始时间
     */
    private Long avgCostTime;

    /**
     * 状态，0=未开始、1=完成、2=失败、3=预警
     */
    private Integer state;

    /**
     * 分组编号，同一组下编号相同
     */
    private Integer groupNo;

    /**
     * 当前组下一步骤id，同一组下相同
     */
    private Long groupStepId;

    /**
     * 当前组状态，0=未开始、1=完成、2=失败、3=进行中
     */
    private Integer groupState;

    /**
     * 工况流程内全局顺序
     */
    private Integer sort;
    /**
     * 有效变量值，作为收到测点判断开始依据
     */
    private String validMeteValue;

    /**
     * 测点值是否工况流程测点值先收到 0正常 1提前
     */
    private Integer earlyCache;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建人id
     */
    private Long creator;

}
